package redis

import (
	"errors"
	"fmt"
	"ghw2/server/config"
	"github.com/garyburd/redigo/redis"
	"time"
)

// 由于redis是单线程处理业务逻辑
var RedisPool *redis.Pool

func InitRedis() error {
	RedisPool = &redis.Pool{
		MaxIdle: 16,
		// MaxActive:1000000,
		MaxActive:   0,                 //连接池最大连接数量,不确定可以用0（0表示自动定义），按需分配
		IdleTimeout: 300 * time.Second, //连接关闭时间 300秒 （300秒不使用自动关闭）
		Dial: func() (redis.Conn, error) { //要连接的redis数据库
			c, err := redis.Dial("tcp", config.ServerConfig.Redis)
			if err != nil {
				fmt.Println(err)
				return nil, err
			}

			if len(config.ServerConfig.RedisPassword) >= 1 {
				if _, err := c.Do("auth", config.ServerConfig.RedisPassword); err != nil {
					fmt.Println(err)
					c.Close()
					return nil, err
				}
			}

			return c, nil
		},
	}

	conn := RedisPool.Get()

	if conn == nil {
		return errors.New("Redis连接失败！")
	}
	conn.Close()
	return nil
}
